﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.Transactions;
using CapaPresentacion.Controles;

namespace CapaPresentacion.Vistas
{
    class VentanaBusquedaPadresTutoresViewModel
    {
        public event CargarFamiliar CargarFamiliar;

        private RelayCommand buscarFamiliarAlumnoCommand;
        private RelayCommand cargarFamiliarAlumnoCommand;
        
        private string tipofamiliar;
        private string dni;
        private string nombre;
        private string apellido;
        private Guid idSeleccionado;
        private Alumno alumno;

        public string Dni
        {
            get { return dni; }
            set { dni = value; }

        }

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }

        }

        public string Apellido
        {
            get { return apellido; }
            set { apellido = value; }
        }

        public ICommand BuscarFamiliarAlumnoCommand
        {
            get
            {
                return buscarFamiliarAlumnoCommand;
            }
        }

        public ICommand CargarFamiliarAlumnoCommand
        {
            get
            {
                return cargarFamiliarAlumnoCommand;
            }
        }


        public List<ViewEntity> ListaFamiliares { get; set; }

        public Guid IdSeleccionado
        {
            get { return idSeleccionado; }
            set { idSeleccionado = value; }
        }

        public List<ViewEntity> ListaParentescos { get; set; }

        private VentanaBusquedaPadresTutores view;


        public VentanaBusquedaPadresTutoresViewModel() { }

        public VentanaBusquedaPadresTutoresViewModel(VentanaBusquedaPadresTutores vista, string titulo, string tipo, Alumno alumno)
        {
            this.view = vista;
            this.view.Title = titulo;
            this.view.titulo.Content = titulo;
            this.tipofamiliar = tipo;
            this.alumno = alumno;
            this.buscarFamiliarAlumnoCommand = new RelayCommand(BuscarFamiliarAlumno);
            this.cargarFamiliarAlumnoCommand = new RelayCommand(CargarFamiliarAlumno);


            if (tipofamiliar == "MadreTutora" || tipofamiliar == "PadreTutor")
                this.view.cmbParentesco.Visibility = Visibility.Collapsed;
            else
                ListaParentescos = new ParentescoLogica().ObtenerPrentescosExcluyendoPadres();
            
        }




        private void BuscarFamiliarAlumno(Object parameter)
        {
            if(!String.IsNullOrWhiteSpace(this.dni) || !String.IsNullOrWhiteSpace(this.nombre) || !String.IsNullOrWhiteSpace(this.apellido))
            {
                ListaFamiliares = new FamiliarAlumnoLogica().ObtenerEntidadesParaEditar(this.dni, this.nombre, this.apellido, this.alumno, this.tipofamiliar);

                if (ListaFamiliares != null && ListaFamiliares.Count > 0)
                {
                    this.view.listaDatos.ItemsSource = ListaFamiliares;
                    this.view.panelResultados.Visibility = Visibility.Visible;
                    this.view.lblNoRecords.Visibility = Visibility.Collapsed;
                    this.view.lblRecordNoSelected.Visibility = Visibility.Collapsed;
                }
                else
                {
                    this.view.panelResultados.Visibility = Visibility.Collapsed;
                    this.view.lblNoRecords.Visibility = Visibility.Visible;

                }

            }
            else
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe completar al menos uno de los filtros");
                nueva.ShowDialog();

            }             

        }

        private void CargarFamiliarAlumno(Object parameter)
        {

            if (Validaciones())
            {
                this.view.lblRecordNoSelected.Visibility = Visibility.Collapsed;

                Familiar entidad = new FamiliarAlumnoLogica().ObtenerEntidadParaEditar(idSeleccionado);

                switch (tipofamiliar)
                {

                    case "MadreTutora":

                        this.CargarFamiliar(entidad, "MadreTutora");
                        this.view.Close();
                        break;

                    case "PadreTutor":
                        this.CargarFamiliar(entidad, "PadreTutor");
                        this.view.Close();
                        break;

                    case "Urgencia1":
                        entidad.IdParentesco = this.view.cmbParentesco.ValorSeleccionado;
                        entidad.DescripcionParentesco = new ParentescoLogica().ObtenerDescripcionPorId(new Guid(entidad.IdParentesco));
                        this.CargarFamiliar(entidad, "Urgencia1");
                        this.view.Close();
                        break;

                    case "Urgencia2":
                        entidad.IdParentesco = this.view.cmbParentesco.ValorSeleccionado;
                        entidad.DescripcionParentesco = new ParentescoLogica().ObtenerDescripcionPorId(new Guid(entidad.IdParentesco));
                        this.CargarFamiliar(entidad, "Urgencia2");
                        this.view.Close();
                        break;

                    case "Autorizado1":
                        entidad.IdParentesco = this.view.cmbParentesco.ValorSeleccionado;
                        entidad.DescripcionParentesco = new ParentescoLogica().ObtenerDescripcionPorId(new Guid(entidad.IdParentesco));
                        this.CargarFamiliar(entidad, "Autorizado1");
                        this.view.Close();
                        break;

                    case "Autorizado2":
                        entidad.IdParentesco = this.view.cmbParentesco.ValorSeleccionado;
                        entidad.DescripcionParentesco = new ParentescoLogica().ObtenerDescripcionPorId(new Guid(entidad.IdParentesco));
                        this.CargarFamiliar(entidad, "Autorizado2");
                        this.view.Close();
                        break;

                    default:
                        break;

                }

            }
             
           
        }


        internal bool Validaciones()
        {

           if(tipofamiliar == "Urgencia1" || tipofamiliar == "Urgencia2" || tipofamiliar == "Autorizado1" || tipofamiliar == "Autorizado2")
            {
                if (this.view.cmbParentesco.ValorSeleccionado == Guid.Empty.ToString() || this.view.cmbParentesco.ValorSeleccionado == null)
                {
                    VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe especificar un parentesco");
                    nueva.ShowDialog();
                    return false;
                }                   

            }

           if (this.idSeleccionado == Guid.Empty)
           {
               this.view.lblRecordNoSelected.Visibility = Visibility.Visible;
               return false;
           }

           return true;

        }




    }
}
